package cn.jsj.onclock.service;

import cn.jsj.onclock.aop.PageNum;
import cn.jsj.onclock.aop.PageSize;
import cn.jsj.onclock.aop.PrimaryKeyParam;
import cn.jsj.onclock.pojo.LabelEnt;
import cn.jsj.onclock.pojo.identity.UserIdentityEnum;
import org.hibernate.validator.constraints.Length;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * @author 卢斌
 */
@Validated
public interface LabelService {

    /**
     * Id获取标签实体 （不需要验证用户身份）
     *
     * @param labelId   标签卡Id
     * @return  标签实体
     */
    LabelEnt getOneLabelById(@PrimaryKeyParam Long labelId);


    /**
     * 查询全部的签到标签
     *
     * @param pageNum   页码号
     * @param pageSize  页容量
     * @return  全部的签到标签
     */
    List<LabelEnt> listAllLabel(@PageNum Integer pageNum, @PageSize Integer pageSize);


    /**
     * 查询符合名称前缀的标签列表
     *
     * @param titlePrefix   前缀
     * @param pageNum       页码号
     * @param pageSize      页容量
     * @return  符合前缀名称的标签列表
     */
    List<LabelEnt> listLabelLikeTitlePrefix(@NotBlank@Length(max = 60) String titlePrefix, @PageNum Integer pageNum, @PageSize Integer pageSize);


    /**
     * 模糊查询标签
     *
     * @param pareTitle 名称片段
     * @return  模糊查询结果
     */
    List<LabelEnt> listLabelLikeTitle(@NotBlank@Length(max = 60) String pareTitle);



    /**
     * 管理员录入标签卡信息
     *
     * @param identity          用户身份标识
     * @param title             标签卡名称
     * @param labelNum          标签卡唯一标识
     */
    void insertOneLabel(@NotNull UserIdentityEnum identity, @NotBlank@Length(max = 60) String title, @NotBlank@Length(max = 200) String labelNum);


    /**
     * 管理员更新标签名称
     *
     * @param labelId       标签卡Id
     * @param identity      操作者身份
     * @param labelTitle    标签新名称
     */
    void updateLabelTitle(@PrimaryKeyParam Long labelId, @NotNull UserIdentityEnum identity, @NotBlank@Length(max = 60) String labelTitle);



}
